跳到主要内容

6.简单独热状态转移3

以下是针对一个具有一个输入、一个输出和四个状态的摩尔状态机的状态转换表。使用以下独热状态编码:A=4'b0001,B=4'b0010,C=4'b0100,D=4'b1000。

假设采用独热编码,通过观察得出状态转移和输出逻辑方程。仅实现此状态机的状态转移逻辑和输出逻辑(组合逻辑部分)。(测试平台将会使用非独热输入进行测试,以确保您没有尝试做一些更复杂的事情)。

alt text

"通过观察推导方程"意味着什么?

独热状态机编码保证了正好有一个状态位是1。这意味着要确定状态机是否处于某个特定状态,只需检查一个状态位,而非所有状态位。这通过查看状态转移图中每个状态的输入边,导致了状态转移的简单逻辑方程。

例如,在上述状态机中,状态机如何达到状态A?它必须使用两个输入边中的一个:"当前处于状态A且in=0"或"当前处于状态C且in=0"。由于采用了独热编码,检测“当前处于状态A”的逻辑方程就是简单地使用状态A的状态位。这引出了状态位A的下一个状态的最终逻辑方程:next_state[0] = state[0]&(~in) | state[2]&(~in)。独热编码保证了最多只有一个子句(乘积项)在同一时间是"活跃"的,因此这些子句可以直接被逻辑或操作连接起来。

当练习要求"通过观察"来获取状态转移方程时,应使用这一特定方法。评判者会使用非独热的输入进行测试,以确保您的逻辑方程遵循这种方法,而不是对于非法(非独热)的状态位组合采取其他措施(比如重置状态机)。

虽然了解这个算法对于RTL级设计(逻辑综合器会处理这部分)不是必需的,但它说明了为什么独热状态机通常拥有更简单的逻辑(代价是需要更多的状态位存储空间),并且这个主题经常出现在数字逻辑课程的考试中。

alt text

模块声明

module top_module(
input in,
input [3:0] state,
output [3:0] next_state,
output out);

做题区